@database ARCHandler @$VER: ARCHandler.guide 37.40 (6.7.94) @(C) Rafael D'Halleweyn @author Rafael D'Halleweyn @index index @node main "ARCHandler 1.0a" @prev main @next main @{b}ARCHandler 1.0a@{ub} ================ ARCHandler is Copyright 1994 Rafael D'Halleweyn. All rights reserved. @{" Disclaimer " link disclaimer} @{" Shareware Notice " link shareware} @{" Introduction " link introduction} @{" Requirements " link requirements} @{" Starting " link starting} @{" Using " link using} @{" Technical Information " link techno} @{" History " link history} @{" The author " link author} When I'm sad she comes to me with a thousand smiles she gives to me free It's alright, it's alright she says, Take anything you want from me, anything. Jimi Hendrix @endnode @node disclaimer "ARCHandler: Disclaimer" @prev disclaimer @next shareware @{b}@{u}Disclaimer@{ub}@{uu} With this document I make no warranties or representations, either expressed or implied, with respect to the program described herein. The program and the information presented herein is being supplied on an `as is' basis and is expressly subject to change without notice. The entire risk as to the use of the program and the information presented is assumed by the user. In no event will I be liable for direct, indirect, incidental, or consequential damages resulting from any claim arising out of the use of the program or the information presented herein, even if I have been advised of the possibilities of such damages. @endnode @node shareware "ARCHandler: Shareware Notice" @prev disclaimer @next introduction @{b}@{u}ARCHandler is Shareware@{ub}@{uu} This package is released as shareware. This means you can copy it freely as long as you don't ask any money for it, except perhaps a nominal fee for copying. If you like and use this package on a regular base, you should send @{"me" link author} a contribution of 500 BEF or USD 15. Send money by International Money Order, EuroCheck (in BEF!) or Cash. The package is Copyright Rafael D'Halleweyn, All Rights Reserved. The author reserves the right to change the status of this package whenever he finds it appropriate. This package should not be spread in any other form than an LhA (or equivalent) archive and all parts of it should be spread together. The package may not be altered in any way and cannot be used for commercial purposes without the prior written permission of the author. The archive should contain the following files: ARCHandler (dir) C (dir) FlushARC MountListEntry L (dir) arc-handler S (dir) MountList-header WhichLhA ARC ARC.info ARCHandler.guide ARCHandler.guide.info Install Install.info ReadmeQuick ReadmeQuick.info ARCHandler.info The installation-script (`Install') and the extra commands it uses (`MountListEntry') are also copyrighted and can't be used in any other project/archive without the prior written permission of the author. @endnode @node introduction "ARCHandler: Introduction" @prev shareware @next requirements @{b}@{u}Introduction to the ARCHandler@{ub}@{uu} @{"Archives" link archive} (such as @{"LhA" link lha} , Zip, Zoo, Tar, ...) are very easy to store and move large amounts of files. However, if you wish to use the files contained in the archive you always have to extract the files first. Secondly, to easily browse through the archive, you have to extract the whole archive. Wouldn't it be easier if you could treat archives just like directories: move to a directory, look which files are in the directory and possibly use one of those files. I have already heard a lot of suggestions in this direction, so the idea is neither mine nor is it original. But I've never seen an implementation, so I tried to make my own and this is the result. Currently the ARCHandler only supports @{"lha" link lha}-archives. @endnode @node archive "What is an archive?" @prev archive @next archive In this text the word @{i}archive @{ui}is used to indicated a group of files, that are stored in one big file, possibly also containing the file-structure of the original (directories) and maybe using compression to store the files. @{i}Archives @{ui}are mainly used to move large amounts of data from one computer to another (via disk/modem/ftp/...). @{i}Archives @{ui}are also an easy way to store that data. The ARCHandler currently only supports @{"lha" link lha}-archives. @endnode @node lha "What is an lha-archive?" @prev lha @next lha LhA is probably the most widely used archiver on the Amiga. It uses the Lempel-Ziv-Huffman (LZH) compression scheme to reduce archive size. Several other LZH-archives exist for the Amiga (LhArcA, LhArc, LZ, LhEx, ...) and for UNIX and MS-DOS machines. @endnode @node requirements "ARCHandler: Requirements" @prev introduction @next starting @{b}@{u}Requirements to use the ARCHandler@{ub}@{uu} ARCHandler currently requires an Amiga running Workbench/Kickstart 2.04 or higher. You also need the LhA command ( Stefan Boberg), both the registered and evaluation version should work. ARCHandler currently also needs the PIPE-device. If you didn't change your Workbench-partition after Workbench-installation this should be no problem (otherwise you might want to add a `Mount PIPE:' to your User-Startup). To test the handler, a few lha-archives can also be very handy :). @endnode @node starting "ARCHandler: Starting" @prev requirements @next using @{b}@{u}Starting the ARCHandler@{ub}@{uu} To be able to use the ARCHandler you should install it first. If you double click the `Install'-icon, the handler will be installed for you (the installation requires the Commodore Installer, Commodore). If you only want to test the handler, double click the `ARC'-icon and a disk-icon should appear on the Workbench-window named `Archives'. Once installed, you'll have to start the handler. If you've selected the `Always mount ARC: on start-up?'-option during the installation, the handler will be started after each reset. If you did not use this option, you'll have to start it manually: under Workbench 2.1 or higher the easiest way is to double-click the `ARC'-icon in the `Storage/DOSDrivers'-drawer of your Workbench partition (or disk); if you are using Workbench 2.04 or higher you can (also) start the handler by entering the following command in a Shell: @{i}Mount ARC: @{ui} If everything was installed correctly, a disk-icon should appear on the Workbench-window named `Archives' (or the name you selected during installation). @endnode @node using "ARCHandler: Using" @next techno @prev starting @{b}@{u}Using the ARCHandler@{ub}@{uu} Once the ARCHandler is started, you should be able to use it as any-other AmigaDOS-device. The root-directory of the device contains all the volumes that AmigaDOS knows of (it even contains the ARC-volume, you can use this to access an archive in an archive). Just enter one of those volumes and you'll see all the files and directories that are on that volume. You're able to use any of these files the same way as on the normal volume, read a text, execute a program (only read operations are supported in this version). When you come across an lha-archive you'll notice that the handler tells you that it is a directory. When you enter the archive you'll see all the files and directories that reside in the archive. These files can be used as normal files, you can read texts or execute the programs. Currently the handler doesn't support writing to files in an archive. @endnode @node techno "ARCHandler: Technical Info" @prev using @next history @{b}@{u}Some technical background@{ub}@{uu} @{" Startup-arguments " link startup} @{" Workbench icons " link icons} @{" Archive-file-lists " link filelists} @{" FlushARC command " link flusharc} @{" Packet types " link packets} @endnode @node startup "ARCHandler: Startup-arguments" @prev startup @next icons @toc techno @{b}Startup-arguments@{ub} The ARCHandler uses the `Startup'-field of a MountList/DOSDriver to let the user pass some important information. The string in the `Startup'-field is parsed with ReadArgs(). The string should always have double-quotes around it and you should only use single-quotes (') in the string. Currently the arc-handler recognizes the following arguments: @{" NAME " link namearg} @{" LHA " link lhaarg} @{" TEMPDIR " link tempdirarg} @{" BUFFERS " link buffersarg} @{" DISKICON " link diskiconarg} @{" DRAWERICON " link drawericonarg} @{" NOEXTCHECK " link noextcheckarg} The template of the `Startup'-field is: @{i}NAME/K,LHA/K,TEMPDIR/K,BUFFERS/K/N,DISKICON/K,DRAWERICON/K,NOEXTCHECK/S @{ui} Example: Startup ="LHA=Work:C/LhA DISKICON='Work:Extra Icons/ARCDisk.info'" NOTE: The `Install' script adds a `Startup' tool type to the `ARC'-dosdriver-icon. So, if you want to change the `Startup'-field, you should change the tool type (use the `Icons/Information...' menu item of the Workbench)! @endnode @node namearg "ARCHandler: NAME argument" @prev namearg @next lhaarg @toc startup @{u}NAME@{uu} The NAME argument in the `Startup'-field of a MountList/DOSDriver is used to specify the name of the volume. You can specify any name you want, if you want to use spaces in the name surround the name with single-quotes. The default name is `Archives'. @endnode @node lhaarg "ARCHandler: LHA argument" @prev namearg @next tempdirarg @toc startup @{u}LHA@{uu} The LHA argument in the `Startup'-field of a MountList/DOSDriver is used to specify the place of the `LhA'-command. You should specify the full path (including device/volume/assign). If the path contains spaces you should surround the name with single-quotes. The default is `C:LhA'. @endnode @node tempdirarg "ARCHandler: TEMPDIR argument" @prev lhaarg @next buffersarg @toc startup @{u}TEMPDIR@{uu} The TEMPDIR argument in the `Startup'-field of a MountList/DOSDriver specifies a directory where the ARCHandler can create its temporary files. All the files that the handler extracts from archives are placed in this directory. This directory should be large enough to hold all those files. You should specify the full path (including device/volume/assign). If the path contains spaces you should surround the path with single-quotes. The default is `T:'. Special note about MultiUser: don't use a directory on a muFS-partition as the directory for temporary files! @endnode @node buffersarg "ARCHandler: BUFFERS argument" @prev tempdirarg @next diskiconarg @toc startup @{u}BUFFERS@{uu} The BUFFERS argument in the `Startup'-field of a MountList/DOSDriver indicates the number of unused @{"archive-file-lists" link filelists} that the ARCHandler keeps in memory. This argument should be a number. The default number is two and should probably not be changed. @endnode @node diskiconarg "ARCHandler: DISKICON argument" @prev buffersarg @next drawericonarg @toc startup @{u}DISKICON@{uu} With the DISKICON argument you can specify the name of the icon that the volume should use as its disk-icon. This is the icon that appears in the Workbench window. This arguments defaults to `DEVS:ARCDisk_info'. Special note about MultiUser: don't place the disk-icon on a muFS- partition! @endnode @node drawericonarg "ARCHandler: DRAWERICON argument" @prev diskiconarg @next noextcheckarg @toc startup @{u}DRAWERICON@{uu} With the DRAWERICON argument you can specify the name of the icon that will be used for the archives that are represented as directories. This argument defaults to `DEVS:ARCDrawer_info'. @endnode @node noextcheckarg "ARCHandler: NOEXTCHECK argument" @prev drawericonarg @next noextcheckarg @toc startup @{u}NOEXTCHECK@{uu} ARCHandler recognizes lha-archives by looking at the contents of the file. Normally, the handler will only open (and thus recognize) files with a name ending in `.lha' or `.lzh'. When you specify the NOEXTCHECK argument the handler will open all the files and it will also recognize archives with a filename not ending in `.lha' or `.lzh'. However, this will take much longer to scan directories, so by default the option is off (the argument is a switch, if you use the argument in the `Startup'-field, the option is enabled). @endnode @node icons "ARCHandler: Workbench icons" @prev startup @next filelists @toc techno @{b}Workbench icons@{ub} To be able to easily access the ARCHandler through the Workbench, the handler adds extra icons: -In the root of the ARCHandler volume there is a disk-icon (Disk.info). This icon is currently the only file that can be written to. (see also @{"DISKICON" link diskiconarg}) -In the root of the volume there are also drawer-icons for the other volumes. These icons are created from the original disk-icon on that volume (if non disk-icon exists on a certain volume the default disk-icon will be used). You can't write to these icons. -For all the archives the handler recognizes a drawer-icon is added. These icons are also write protected. (see also @{"DRAWERICON" link drawericonarg}) @endnode @node filelists "ARCHandler: Archive-file-lists" @prev icons @next flusharc @toc techno @{b}Archive-file-lists@{ub} ARCHandler keeps a certain amount of unused archive-file-lists (a list of all the files and directories in an archive) in memory (@{"BUFFERS" link buffersarg}). This has the advantage that the handler won't have to re-list the archive on every access. This results in a faster response. This also has a small side-effect, the handler keeps a lock on all archives whose archive-file-list is still in memory. The handler uses a simple LRU (least-recently-used) replacement rule to select the archive-file-list that will be freed when another archive-file-list is no longer used. As a result the archive-file-list-lock won't be released until enough other archives are used. If, at a certain moment, you want to free all unused archive-lists and locks you can use the @{"FlushARC" link flusharc} command. @endnode @node flusharc "ARCHandler: FlushARC" @prev filelists @next packets @toc techno @{b}FlushARC command@{ub} You can use the FlushARC-command if you want to free all unused @{"archive-file-lists" link filelists} and archive-locks. The FlushARC command has the following template: @{i}FlushARC DEVICE @{ui} The DEVICE argument defaults to `ARC:'. The DEVICE argument should be the name of the device, not the name of the volume. To flush the device named `ARC2:' use: @{i}FlushARC ARC2: @{ui} @endnode @node packets "ARCHandler: Packet types" @prev flusharc @next packets @toc techno @{b}Unsupported packets@{ub} This is a list of the packets types that the handler currently doesn't support: These actions will be supported in a future writable version: ACTION_CREATE_DIR ACTION_DELETE_OBJECT ACTION_RENAME_OBJECT ACTION_SET_COMMENT ACTION_SET_DATE ACTION_SET_FILE_SIZE ACTION_SET_PROTECT These two actions don't need to be implemented because the dos.library emulates them by using ACTION_EXAMINE_OBJECT and ACTION_EXAMINE_NEXT: ACTION_EXAMINE_ALL ACTION_EXAMINE_ALL_END actions that may be implemented, if needed: ACTION_ADD_NOTIFY ACTION_CHANGE_MODE ACTION_COPY_DIR_FH ACTION_EXAMINE_FH ACTION_FH_FROM_LOCK ACTION_FREE_RECORD ACTION_LOCK_RECORD ACTION_MAKE_LINK ACTION_PARENT_FH ACTION_READ_LINK ACTION_REMOVE_NOTIFY ACTION_RENAME_DISK ACTION_SET_OWNER Actions that won't be implemented: ACTION_FORMAT ACTION_FLUSH ACTION_MORE_CACHE ACTION_INHIBIT ACTION_WRITE_PROTECT @{b}Packets ARCHandler needs@{ub} This is the minimal list of packets that an underlying FileSystem should support, if you want to use it through the ARCHandler: ACTION_COPY_DIR ACTION_END ACTION_EXAMINE_NEXT ACTION_EXAMINE_OBJECT ACTION_FINDINPUT ACTION_FREE_LOCK ACTION_LOCATE_OBJECT ACTION_PARENT ACTION_READ ACTION_SEEK @endnode @node history "ARCHandler: History" @prev techno @next author @{b}@{u}History of the ARCHandler@{ub}@{uu} ----------------------------------------------------------------------- release 1.0 [37.129 (12.7.94)] -First release. ----------------------------------------------------------------------- release 1.0a [37.131 (14.7.94)] -Volumes that have the same name as a device couldn't be used through the handler (reported by Erik Bergen). -Removed a nasty Enforcer hit. -Made some changes to the installation script. ----------------------------------------------------------------------- future release -Support for 2.0-packets. -Fully writable filesystem, with the ability to create/change files in archives. -Support for more archive types (zip/zoo/tar/...). -Support for packed files (XPK/PowerPacker/Imploder/...). These are just some of the features I @{i}might @{ui} add to a future release. I don't guarantee that either of these features will ever be implemented (but I hope they will). If you've got any good ideas for a future release let @{"me" link author} know. @endnode @node author "About the Author" @prev history @next author ARCHandler was written by @{b}Rafael D'Halleweyn@{ub}. If you have any questions, remarks, suggestions or bug reports please let me know. You can contact me via normal mail: Rafael D'Halleweyn Perckhoevelaan 17 B-2610 Antwerpen BELGIUM Or you can try to reach me via EMail, you can reach me at: amiga@suntew.ruca.ua.ac.be (but this is not my own account). I will try to read my mail there during July, August and September. From October you'll be able to reach me at: Rafael.DHalleweyn@rug.ac.be (this is my own account). [if you only have fido-access you should send a message to UUCP (2:29/777.0) and the first line of the message should read `To: ', the second line should be empty] I'd like to thank Nico Fran ois, Johan Billing, Per-Anders Josefsson, Stefan Zeiger, Tom De Voeght and Peter Stuer for eta-testing. I'd also like to thank David Larsson for the excellent KingCON. These seven persons shouldn't try to send me the shareware fee, because then I'll have to send it back :-). ARCHandler is Copyright Rafael D'Halleweyn. All Rights Reserved. @endnode @node index "ARCHandler: Index" @prev index @next index @{b}Index@{ub} @{"archive" link archive} @{"author" link author} @{"BUFFERS" link buffersarg} @{"Disclaimer" link disclaimer} @{"DISKICON" link diskiconarg} @{"DRAWERICON" link drawericonarg} @{"filelists" link filelists} @{"FlushARC" link flusharc} @{"history" link history} @{"icons" link icons} @{"Introduction" link introduction} @{"LhA" link lha} @{"LHA arguments" link lhaarg} @{"NAME" link namearg} @{"NOEXTCHECKARG" link noextcheckarg} @{"packets" link packets} @{"Requirements" link requirements} @{"Shareware" link shareware} @{"Starting" link starting} @{"Startup-field" link startup} @{"Technical Information" link techno} @{"TEMP" link tempdirarg @{"Using" link using} @{"Workbench icons" link icons} @endnode